package br.com.ecomanda.controller;

import java.util.List;

import br.com.ecomanda.dao.FuncionarioDao;
import br.com.ecomanda.dao.GarcomDao;
import br.com.ecomanda.enumerations.PermissoesEnum;
import br.com.ecomanda.exceptions.ConexaoComBancoDeDadosException;
import br.com.ecomanda.model.Funcionario;
import br.com.ecomanda.model.FuncionarioPerfil;
import br.com.ecomanda.model.Garcom;

public class FuncionarioController extends GenericController {

	private FuncionarioDao funcionarioDao;

	private GarcomDao garcomDao;

	public FuncionarioController(EComandaController parent) throws ConexaoComBancoDeDadosException {
		super(parent);
		funcionarioDao = new FuncionarioDao();
		garcomDao = new GarcomDao();
	}

	public Funcionario getFuncionario(int funcionarioId) {
		return funcionarioDao.getById(funcionarioId);
	}

	public Garcom getGarcom(Funcionario funcionario) {
		return garcomDao.getById(funcionario.getIdFuncionario());
	}

	public static boolean permissao(Funcionario funcionario,
			PermissoesEnum permissao) {
		if (funcionario == null)
			return false;

		List<FuncionarioPerfil> perfis = funcionario.getFuncionarioPerfils();
		if (perfis == null)
			return false;

		for (FuncionarioPerfil perfil : perfis)
			if (permissao == PermissoesEnum.ATUALIZAR_PEDIDO_OPERACAO_ENCERRADA) {
				if (perfil.getPerfil().getFlAtualizaPedidoOpEncerrada()
						.equals("1"))
					return true;
			} else if (permissao == PermissoesEnum.ATUALIZAR_QUALQUER_STATUS) {
				if (perfil.getPerfil().getFlAtualizaQualquerStatus()
						.equals("1"))
					return true;
			} else if (permissao == PermissoesEnum.DAR_DESCONTO) {
				if (perfil.getPerfil().getFlDaDesconto().equals("1"))
					return true;
			} else if (permissao == PermissoesEnum.ENCERRAR_SEM_PAGAMENTO) {
				if (perfil.getPerfil().getFlEncerraSemPagamento().equals("1"))
					return true;
			} else if (permissao == PermissoesEnum.PAGAR_COMANDA_ENCERRADA) {
				if (perfil.getPerfil().getFlPagaComandaEncerrada().equals("1"))
					return true;
			}

		return false;
	}

}
